/**
 * 
 *  Este arquivo é parte do programa TODO Ver nome. TODO Ver nome é um software livre; você pode redistribui-lo e/ou 
 *  modifica-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); 
 *  na versão 2 da Licença, ou (na sua opnião) qualquer versão.
 *  
 *	Este programa é distribuido na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implicita
 *  de ADEQUAÇÂO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.
 *	Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa, se não, escreva para a Fundação do
 *	Software Livre(FSF) 
 *
 *	Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 */

package fullcalc.expressoes;

import com.google.code.mathparser.MathParser;
import com.google.code.mathparser.MathParserFactory;
import com.google.code.mathparser.parser.calculation.Result;

import fullcalc.fachada.interna.abstrata.AbstractObservador;

/**
 * 
 * <p>
 * Classe que estende {@link AbstractObservador} e executa o cálculo com
 * framework {@link MathParser}
 * </p>
 * 
 * @author Willyan Guimarães Caetano
 */
public class ObservadorExpressoes extends AbstractObservador {
	/**
	 * Expressão usada para realizar o cálculo
	 */
	private String expressao;
	/**
	 * Resultado obtido de determinada expressao
	 */
	private String resultado;

	/**
	 * Instância da interface {@link MathParser} usada para chamada framework
	 * <b>MathParser</b>
	 */
	private MathParser mathParser;
	/**
	 * Instância da interface {@link Result} usada para chamada de resultado
	 * obtido da expressão calculada pelo framework <b>MathParser</b>
	 */
	private Result result;

	public ObservadorExpressoes() {
		this.expressao = "";
		this.resultado = "";
	}

	@Override
	public void atualiza(Object objeto) {
		this.expressao = (String) objeto;

	}

	public String getExpressao() {
		return expressao;
	}

	public String getResultado() {
		return resultado;
	}

	public void executaCalculoExpressao(String expressao) {
		this.expressao = expressao;

		mathParser = MathParserFactory.create();
		result = mathParser.calculate(expressao);

		resultado = String.valueOf(result.doubleValue());
	}

}
